
#ifndef ADMINBLOQUESLIBRES_H_
#define ADMINBLOQUESLIBRES_H_

using namespace std;

#include <string.h>
#include <fstream>
#include <cstdlib>
#include <iostream>
#include <sstream>

#define ARCH_LISTAENLAZADA_EXT "ael"

/* Se utiliza para encadenar los bloques libres de un ArchivoDeBloques
 *
 * ESTRUCTURA:
 *  | N de ultimo blq utilizado | # de blqs liberados | N1 | N2 | ..... | Nn |
 *  todos con tamaño "sizeof(int)"
 */
class ListaEnlazada {
private:
	fstream flujo;

public:
	/* ---------------------------------------------------------------------------------------------------------- */
	/* PRE:  Ninguna
	 * POST: Crea un instancia nueva, la serializa con el nombre pasado por parametro, si existe lo levanta para
	 *       lecto-escrtitura sino lo crea y lo deja inicializado para lecto-escritura  */
	ListaEnlazada(string nombre);

	/* ---------------------------------------------------------------------------------------------------------- */
	/* PRE:  Instancia creada
	 * POST: destruye la instancia */
	~ListaEnlazada();

	/* ---------------------------------------------------------------------------------------------------------- */
	/* PRE:  Instancia creada
	 * POST: Devuelve un numero de bloque libre, primero se fija en la pila si ya hay alguno libre para ser
	 *       reutilizado caso contrario genera uno nuevo a partir del ultimo generado*/
	short pedirBloqueLibre();

	/* ---------------------------------------------------------------------------------------------------------- */
	/* PRE:  Instancia creada y el numero de bloque no esta en la instancia
	 * POST: Agrega el numero de bloque libre para luego ser reutilizado */
	void agregarBloqueLibre(short numero);

};

#endif /* ADMINBLOQUESLIBRES_H_ */
